package lambad.demo01;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author 真香
 * @create 2021-04-12 22:03
 */
public class LambdaDemo1 {

   public static void main(String[] args){


       /**
        * 创建线程
        */
       // 旧方法
       new Thread(new Runnable() {
           @Override
           public void run() {
               System.out.println("old method start Thread");
           }
       }).start();

       // 新方法 Lambda表达式

       new  Thread(

               ()-> System.out.println("new method lambda start Thread ")
       ).start();

       /**
        * 以下代码的作用是打印出给定数组中的所有元素。注意，使用 Lambda 表达式的方法不止一种。
        * 在下面的例子中，我们先是用常用的箭头语法创建 Lambda 表达式，之后，
        * 使用 Java 8 全新的双冒号(::)操作符将一个常规方法转化为 Lambda 表达式：
        */

       //old way:
       List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
       for (Integer n : list) {
           System.out.println(n);
       }

       // new way:
       list.forEach(n -> System.out.println(n));


       //或者我们可以在Java 8中使用::双冒号运算符
       list.forEach(System.out::println);


       System.out.println("Print all numbers:");
       evaluate(list, (n)->true);

       System.out.println("Print no numbers");
       evaluate(list,(n)->false);

       // 打印偶数
       System.out.println("Print even numbers:");
       evaluate(list, (n)-> n%2 == 0 );

       // 打印奇数
       System.out.println("Print odd numbers:");
       evaluate(list,(n)-> n%2==1);

       // 打印数字大于5
       System.out.println("Print numbers greater than 5:");
       evaluate(list,(n)-> n>5);



   }

    // 断言
    public static void evaluate(List<Integer> list, Predicate<Integer> predicate) {
        for(Integer n: list)  {
            if(predicate.test(n)) {
                System.out.println(n + " ");
            }
        }
    }


}
